package upload

import (
	"crypto/md5"
	"crypto/rand"
	"encoding/base64"
	"encoding/hex"
	"io"
	"net/http"

	"github.com/gin-gonic/gin"
)

// Rtn 返回数据
type Rtn struct {
    Success bool        `json:"success"`
    Errmsg  string      `json:"errmsg"`
    Data    interface{} `json:"data"`
}

// Pictures 返回的图片数据结构
type Pictures struct {
    Key   string `json:"key"`
    Image string `json:"image"`
    Thumb string `json:"thumb"`
}

// Size 接收的图片缩放等的参数
type Size struct {
    Key       string `json:"key"`
    Thumbonly int    `json:"thumbonly"`
    Width     int    `json:"width"`
    Height    int    `json:"height"`
}

// 返回请求的数据
func dataResponse(c *gin.Context, rtn *Rtn) {
    _, exists := c.GetQuery("callback")
    var status int
    // 判断请求成功失败
    if rtn.Success {
        // 请求成功返回200状态
        status = http.StatusOK
    } else {
        // 请求失败返回500状态
        status = http.StatusInternalServerError
    }
    // 有callback参数时 采用jsonp返回数据
    if exists {
        c.JSONP(status, rtn)
    } else {
        // 没有callback参数时 采用json返回数据
        c.JSON(status, rtn)
    }
}

// GetGUID 随机文件名
func GetGUID() string {
    b := make([]byte, 48)
    if _, err := io.ReadFull(rand.Reader, b); err != nil {
        panic("创建文件名出错")
    }
    return GetMd5String(base64.URLEncoding.EncodeToString(b))
}

// GetMd5String md5字符串
func GetMd5String(s string) string {
    h := md5.New()
    h.Write([]byte(s))
    return hex.EncodeToString(h.Sum(nil))
}